import requests
import os


def get_url_content(url: str, getmode='get')-> str:
    """
    根据url获取源码
    :param url: 以http开始的远程网址
    :return str - 返回源码
    """
    try:
        # 获取页面所有内容
        url = f''+url
        if getmode=='get':
            response = requests.get(url)
        else:
            response = requests.post(url)
        # 检查请求是否成功，如果响应状态码不是200，将抛出HTTPError异常
        response.raise_for_status()
        html_cont = response.text
        return html_cont

    except requests.RequestException as e:
        # 如果发生异常，打印错误信息并返回None
        print(f"发生错误：{e}")


def percentage_to_decimal(percentage):
    try:
        # 去除百分号
        cleaned = percentage.strip('%')
        # 转换为浮点数并除以 100
        return float(cleaned) / 100
    except requests.RequestException as e:
            # 如果发生异常，打印错误信息并返回None
            print(f"发生错误：{e}")
            exit()


def write_to_file(content, filename='output.txt', mode='w', encoding='utf-8'):
    """
    通用写入txt函数（支持列表自动换行）
    :param content: 要写入的内容（字符串或列表）
    :param filename: 文件名
    :param mode: 文件模式（w=覆盖（默认）, a=追加, r=只读（不可用于写入）, x=创建新文件（若存在则报错））
    :param encoding: 编码格式 'utf-8' 或 'gbk'
    """
    try:
        with open(filename, mode, encoding=encoding) as f:
            if isinstance(content, list):
                # # 为每个元素添加换行符（保留原列表结构）
                # content = [line + '\n' for line in content]
                # f.writelines(content)
                # 使用 join() 方法自动换行（更简洁）
                f.write('\n'.join(content))
            else:
                f.write(content)
        print(f"成功写入 {filename}")
    except IOError as e:
        print(f"写入失败: {e}")
    except PermissionError:
        print("没有写入权限！")
    except FileNotFoundError:
        print(f"目录 {os.path.dirname(filename)} 不存在！")
    except Exception as e:
        print(f"发生未知错误: {str(e)}")

# 使用示例
# write_to_file("单行文本", 'example.txt', 'w') # 覆盖模式写入多行
# write_to_file(["行1\n", "行2"], 'example.txt', 'a')  # 追加模式写入多行


def read_csv(filename):
    """
    读取csv文件
    :param filename: csv文件
    :return: 查询结果列表
    """
    if check_file_exists(filename):
        try:
            with open(filename, 'r', encoding='utf-8') as file:
                reader = csv.reader(file)
                rows = list(reader)  # 将reader转为列表（每一行是字符串列表）
                dict_data = csv_reader_to_dict(rows)
                return dict_data
                # header = next(reader) # 跳过标题行（如果有的话）
                # # 循环遍历每一行，i为行号（从0开始计数）
                # for i, row in enumerate(reader):
                #     year = row[2]
                #     print(f"年度 ： {i}: {row[1]} \t {str(row[2])}")

        except requests.RequestException as e:
            # 如果发生异常，打印错误信息并返回None
            print(f"发生错误：{e}")

    else:
        return '文件不存在'
        exit()

def csv_reader_to_dict(rows):
    """
    将_csv.reader对象转换为字典
    """
    dict_list = []
    if rows:  # 检查是否有数据
        headers = rows[0]   # 第一行作为列名
        for row in rows[1:]:  # 从第二行开始
            # 将当前行与列名对应，生成字典
            dict_row = {header: value for header, value in zip(headers, row)}
            dict_list.append(dict_row)
    return dict_list
    # print(dict_list)


def check_file_exists(file_path):
    # 检查指定文件是否存在
    return os.path.exists(file_path)